#include "graph.h"
#include <bits/stdc++.h>
#define N 204
using namespace std;
typedef long long ll;

int n, pfa[N], deg[N];
int stk[N], tp, stk2[N], tp2;
int f[N][N], cnt[N];

void add (int u, int v) { f[u][v]=f[v][u]=1; }

void dfs (int u, int fa)
{
    pfa[u]=fa;
    deg[u]=NumberOfRoads();

    for (int i=1; i<=deg[u]; i++) {
        if (i==stk[tp]) { continue; }
        Move(i, 2); stk[++tp]=LastRoad();
        if (Color()==2) {
            Move(LastRoad(), 1); tp--; // return to u && set v to 1
            int cur=u;
            while (Color()!=1) { Move(stk[tp], 2); stk2[++tp2]=LastRoad(); cur=pfa[cur]; tp--; }
            add(u, cur);
            while (tp2) { Move(stk2[tp2], 2); stk[++tp]=LastRoad(); tp2--; }
        }
        else if (Color()==1) {
            int v=++n; add(u, v);
            dfs(v, u);
        }
        else { Move(LastRoad(), 3); tp--; }
    }
    if (fa) { Move(stk[tp], 3); tp--; }
}

void Inspect(int R)
{
    n=1; dfs(1, 0);

    for (int i=1; i<=n; i++) {
        for (int j=1; j<=n; j++) if (i!=j && !f[i][j]) { f[i][j]=n+1; }
    }

    for (int k=1; k<=n; k++) {
        for (int i=1; i<=n; i++) {
            for (int j=1; j<=n; j++) {
                f[i][j]=min(f[i][j], f[i][k]+f[k][j]);
            }
        }
    }

    for (int i=1; i<=n; i++) {
        for (int j=i; j<=n; j++) { cnt[f[i][j]]++; }
    }
    for (int i=1; i<=R; i++) { Answer(i, cnt[i]); }
}